package org.opens.lambda.date;

import org.junit.Test;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatAndParse {

    /**
     * 功能:
     *      将LocalDate时间format成String.
     * 输出:
     *      20191215
     *      2019-12-15
     */
    @Test
    public void test1() {
        LocalDate now = LocalDate.now();
        String format1 = now.format(DateTimeFormatter.BASIC_ISO_DATE);
        String format2 = now.format(DateTimeFormatter.ISO_LOCAL_DATE);

        System.out.println(format1);
        System.out.println(format2);
    }

    @Test
    public void test2() {
        LocalDateTime now = LocalDateTime.now();
        String format1 = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);

        System.out.println(format1);
    }

    /**
     * 说明:
     *      1. 自定义实现格式化.
     */
    @Test
    public void test3() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        String format = now.format(pattern);
        System.out.println(format);
    }

    /**
     * 说明:
     *      1. 默认解析表达式为: yyyy-MM-dd.
     */
    @Test
    public void testParseOne() {
        String date1 = "2019-12-25";
        LocalDate parse = LocalDate.parse(date1);

        System.out.println(parse);
    }

    /**
     * 注意:
     *      1. 需要注意的是, 如果String中没有携带time时间, 则不能使用LocalDateTime来格式化, 否则会报错.
     *          - 也就是说, 应该在项目中规定好要使用的String类型的事件格式, 要使用LocalDate就全部使用LocalDate, 要使用LocalDateTime
     *          就全部使用LocalDateTime; 进行统一化.
     */
    @Test
    public void testParseTwo() {
        String date1 = "2019年12月25";
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd");
        LocalDate parse = LocalDate.parse(date1, pattern);

        System.out.println(parse);
    }

    /**
     * 注意:
     *      1. java8的新时间api需要严格对应时间格式, 不满足就会报错.
     *      2. 一定要注意在java中date是date, time是time, 两者不能像Date那样界限不分明了.
     *          - date就是日期, 2019-12-12这样的;
     *          - time就是时间, 12:25:55这样的.
     */
    @Test
    public void testParseThree() {
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        String startTimeStr = "2018-08-09";

        LocalDateTime startTime = LocalDateTime.parse(startTimeStr, pattern);

        System.out.println(startTime);
    }

}
